package com.lktx.sso.system.service;

import cn.hserver.core.ioc.annotation.Autowired;
import cn.hserver.core.ioc.annotation.Bean;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.lktx.sso.system.bean.OperLogEvent;
import com.lktx.sso.system.entity.OperLog;
import com.lktx.sso.system.mapper.OperLogMapper;
import com.lktx.sso.system.utils.IpUtil;

import java.util.Set;

/**
 * 操作日志 服务类
 *

 */
@Slf4j
@Bean
@RequiredArgsConstructor
public class OperLogService {

    @Autowired
    private OperLogMapper mapper;

    /**
     * 分页查询列表
     *
     * @param page   分页对象
     * @param entity 查询实体
     * @return 所有数据
     */
    public Page<OperLog> page(Page<OperLog> page, OperLog entity) {
        return mapper.paginate(page,new QueryWrapper()
                .like(OperLog::getOperName, entity.getOperName(), StrUtil.isNotEmpty(entity.getOperName()))
                .eq(OperLog::getStatus, entity.getStatus(),entity.getStatus()!=null)
                .ge(OperLog::getOperTime,entity.getStartTime(),entity.getStartTime()!=null)
                .le(OperLog::getOperTime,entity.getEndTime(),entity.getEndTime()!=null)
                .orderBy(OperLog::getOperId,false)
        );
    }

    //
//    /**
//     * 不分页查询列表
//     *
//     * @param entity 实体对象
//     * @return 查询结果
//     */
//    public List<OperLog> list(OperLog entity) {
//        return mapper.selectList(Optional.ofNullable(entity).orElse(new OperLog()).wrapper());
//    }
//
//    /**
//     * 通过主键查询单条数据
//     *
//     * @param id 主键
//     * @return 单条数据
//     */
//    public OperLog getById(Long id) {
//        return mapper.selectById(id);
//    }
//
//    /**
//     * 新增单条数据
//     *
//     * @param entity 实体对象
//     */
//    @Transactional(rollbackFor = Exception.class)
//    public void save(OperLog entity) {
//        mapper.insert(entity);
//    }
//
//    /**
//     * 修改单条数据
//     *
//     * @param entity 实体对象
//     */
//    @Transactional(rollbackFor = Exception.class)
//    public void update(OperLog entity) {
//        AssertUtil.onlyOne(mapper.updateById(entity));
//    }

    /**
     * 批量删除数据
     *
     * @param ids 主键集合
     */
    public void deleteByIds(Set<Long> ids) {
        mapper.deleteBatchByIds(ids);
    }

    /**
     * 清空日志
     */
    public void cleanOperLog() {
        mapper.cleanOperLog();
    }


    public void handleOperLogEvent(OperLogEvent event) {
        OperLog operLog = new OperLog();
        BeanUtil.copyProperties(event, operLog);
        String ipSource = IpUtil.getIp(event.getIp());
        operLog.setIpSource(ipSource);
        mapper.insert(operLog);
    }
}
